// 1.let定义的变量不在window对象上
// let a = 5;
// console.log(a);

// 2.let定义的变量不允许重复声明
// let a = 9

// 3.let定义的变量不存在变量提升
console.log(b)
let b = 8

// 4.let具有暂时性死区
var c = 9
if(true) {
    console.log(c)
    let c = 8
}

// 5.let定义的变量具有块级作用域
for(var i = 0; i < 3; i++) {
    setTimeout(function() {
        console.log(i) //3 3 3
    }, 0)
}

// 解决方法: 1.立即执行函数(闭包)
for(var i = 0; i < 3; i++) {
    (function() {
        setTimeout(function() {
            console.log(i) //0 1 2
        }, 0)
    })()
}

// 解决方法: 2.将var换成let
for(let i = 0; i < 3; i++) {
    setTimeout(function() {
        console.log(i) //3 3 3
    }, 0)
}
    